<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    // 数组的浅复制  => 对象的赋值  var brr = arr;

    // 数组的深复制  => 得到一个与原数组元素相同的新数组
    // 1. 浅拷贝
    // 2. 深拷贝   

    // 1. 浅拷贝 => 只拷贝一层(最外层), 如果数组中有其他数组/对象 => 依旧是浅复制
    // (1) 新建数组,遍历原数组,将原数组中的元素放到新数组
    // (2) 使用数组的方法  slice()  concat() map()

    // var arr = [1, 4, 7, 2, 5, 8, 3, 6, 9];
    // var brr = [];
    // for (var i = 0; i < arr.length; i++) {
    //     var item = arr[i]; // 1, 4, 7, 2, 5, 8, 3, 6, 9
    //     brr.push(item);
    // }
    // // var brr = arr.slice();
    // console.log(arr, brr);
    // console.log(arr === brr);


    // 浅拷贝演示: 一维数组中的值类型被复制,引用类型还是引用同一片内存地址
    // var arr = [1, 4, 7, [2, 5, 8], [3, 6, 9]];
    // var brr = [];
    // for (var i = 0; i < arr.length; i++) {
    //     var item = arr[i]; // 1, 4, 7, [2, 5, 8],[3, 6, 9]
    //     brr.push(item);
    // }
    // // var brr = arr.slice();
    // console.log(arr, brr);
    // console.log(arr === brr);

    // console.log(arr[3],brr[3]);
    // console.log(arr[3]===brr[3]);

    // arr[3].push(100);
    // console.log(brr[3]);


    // 深拷贝:  如果出现多维数组,也要对该数组的每一层进行复制(得到一个新的)  
    var arr = [1, 4, 7, [2, 5, 8, [3, 6, 9]]];
    // debugger;
    function deepCpoy(list) {
        // 第一次:  [1, 4, 7, [2, 5, 8,[3,6,9]]]
        // 第二次:  [2, 5, 8,[3,6,9]]
        // 第三次:  [3,6,9]
        var newList = [];
        for (var i = 0; i < list.length; i++) {
            var item = list[i]; // 1, 4, 7,  [2, 5, 8,[3,6,9]]  
            if (Array.isArray(item)) { // 数组中的元素依旧是一个数组
                var copyList = deepCpoy(item); //  [2, 5, 8,[3,6,9]]
                newList.push(copyList);
            } else {
                newList.push(item); // 1, 4, 7
            }
        }
        return newList;
    }

    var brr = deepCpoy(arr);
    console.log(brr);

    console.log(arr, brr);
    console.log(arr === brr);

    console.log(arr[3], brr[3]);
    console.log(arr[3] === brr[3]);

    console.log(arr[3][3], brr[3][3]);
    console.log(arr[3][3] === brr[3][3]);

</script>

</html>